In many organizations, operations teams are charged with management and support of applications without getting clear information about the application topology and infrastructure provided by the application development team. It makes application management, change control, and impact analysis tedious and sometimes impossible. In those scenarios, the application is like an unpredictable and unstructured black box for operations.
For effective change control and impact analysis, the operations team has to discover application dependencies and analyze how a change to one component may affect other dependent components. Today, the only way to discover dependencies is to get a blue print from the application development team that describes the application architecture. After that, the blue print needs to be updated every time a new version of the application is deployed. That process is labor intensive and error prone.
The difficulty in comprehending application dependencies becomes even more complex when dealing with distributed applications, which are typically characterized by components running on several different machines, written in different languages, and interacting in complex ways. For instance, modern Enterprise .NET applications have a distributed architecture and may consist of a number of components talking to each other via various communication protocols. In some cases, they also rely on external service providers. Communication with external service providers is typically performed using Web Services. If we consider a single application component, it may have a number of dependencies on internal service providers that correspond to other components of the distributed application and on external service providers that may be outside of the boundary of the distributed application. A misbehavior or a change in any of the service providers may affect the functionally or availability of the application component.
It would therefore be advantageous to provide techniques by which application dependencies existent in distributed applications could be discovered, regardless of the manner in which the distributed application was developed, and particularly regardless of whether the separate application components are developed in different languages, or run on multiple machines, or interact in complex ways.